package server.source;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

import bean.SimpleBean;

/**
 * 使用Web Service注解将Java类标记为实现 Web Service，亦可用 Web Service接口
 * - targetNamespace 指定从 Web Service 生成的 WSDL 和 XML 元素的 XML 名称空间。缺省值为从包含该 Web Service 的包名映射的名称空间。
 * - serviceName 指定 Web Service 的服务名称： wsdl:service。缺省值为 Java 类的简单名称 + Service。
 */
@WebService(serviceName = "MyService", targetNamespace = "http://webservice")
public class HelloService {

	/** - exclude 指定是否从 Web Service 中排除某一方法。缺省值为  false
	 */
	@WebMethod(exclude = true)
	public String excludeMethod(String param) {
		return " exclude method : " + param;
	}

	/** - operationName 指定与此方法相匹配的 wsdl:operation 的名称。缺省值为 Java 方法的名称
	 */
	@WebMethod(operationName = "aliasMethod")
	@WebResult(name = "myReturn")
	public String any(@WebParam(name = "name") String param) {
		return "alias method : " + param;
	}

	public String simpleMethod(String param) {
		return "simpleMethod : " + param;
	}
	
	//自定义类型的传递
	public List<SimpleBean> getSimpleBeanList() {
		List<SimpleBean> list = new ArrayList<SimpleBean>();
		list.add(new SimpleBean("yang", 23, new Date()));
		list.add(new SimpleBean("Matrix", 33, new Date()));
		
		return list;
	}
	
	//service的输出不会给client端看到
	public void printSimpleBean(SimpleBean bean) {
		System.out.println(bean.toString());
	}
	
	//要输出至client端可以返回string
	public String simpleBean2String(SimpleBean bean) {
		return bean.toString();
	}

	public static void main(String[] args) {
		/**
		 * 发布WebService,注意如果提示：Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: 
		 * Server Runtime Error: java.net.BindException: Address already in use: bind
		 * 则需要修改一下发布端口
		 */
		Endpoint.publish("http://localhost:8011/helloService", new HelloService());
		System.out.println("Server startup...");
	}

}